package com.junjie.base.datasource.db;

import java.util.List;

/**
 * 基础的Dao
 * @param <T>
 */
public interface BaseDao<T> {
    /**
     * 基础的新增数据Dao
     * @param o 实体类对象
     * @return 更新数据行数
     */
    default int insert(T o){
        return JdbcTemplate.insert(o);
    }

    /**
     * 基础的根据ID删除数据Dao
     * @param id ID
     * @return 更新数据行数
     */
    default int delete(long id){
        return JdbcTemplate.deleteById(getCla(), id);
    }

    /**
     * 基础的根据ID修改数据Dao
     * @param o 实体类对象
     * @return 更新数据行数
     */
    default int update(T o){
        return JdbcTemplate.updateById(o);
    }

    /**
     * 基础的根据Id查询单条数据Dao
     * @param id ID
     * @return 封装好的实体类对象
     */
    default T findById(long id){
        return JdbcTemplate.findById(getCla(), id);
    }

    /**
     * 基础的查询所有数据Dao
     * @return 封装好的实体类对象列表
     */
    default List<T> findAll(){
        return JdbcTemplate.findAll(getCla());
    }

    /**
     * 基础的模糊搜索Dao
     * @param o 实体类对象
     * @return 封装好的实体类对象列表
     */
    default List<T> search(T o){
        return JdbcTemplate.search(o);
    }

    /**
     * 基础的条件查询Dao
     * @param o 实体类对象
     * @return 封装好的实体类对象列表
     */
    default List<T> termSearch(T o){
        return JdbcTemplate.termSearch(o);
    }

    /**
     * 此方法放回Dao所关联的实体类,必须实现,否则工具类失效
     * @return 实体类
     */
    Class<?> getCla();
}
